package com.zhb.cloud.core.component;

import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingQueue;

import com.zhb.cloud.mail.model.Email;

/**
 * @ClassName: MailQueue
 * @author: zhb
 * @date: 2017年11月25日 下午12:10:35
 * @Description: 邮件队列--交给spring 容器处理
 */
public class MailQueueProduce {
	/**
	 * 队列大小
	 */
	static final int QUEUE_MAX_SIZE = 1000;
	/**
	 * 采用可阻塞队列处理(对大型的分布式应用一般采用mq实现)
	 */
	static BlockingQueue<Email> blockingQueue = new LinkedBlockingQueue<Email>(QUEUE_MAX_SIZE);

	/**
	 * 构造函数私有化
	 */
	private MailQueueProduce() {
	};

	/**
	 * 单例实现
	 */
	private static MailQueueProduce queue = new MailQueueProduce();

	// 单例队列
	public static MailQueueProduce getMailQueue() {
		return queue;
	}

	// 生产入队
	public void produce(Email mail) throws InterruptedException {
		blockingQueue.put(mail);
	}

	// 消费出队
	public Email consume() throws InterruptedException {
		return blockingQueue.take();
	}

	// 获取队列大小
	public int size() {
		return blockingQueue.size();
	}
}
